﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Collections.Generic;
using Lcsoft.UrlRewriter.Transforms;
using Lcsoft.UrlRewriter.Utilities;

namespace Lcsoft.UrlRewriter.Configuration
{
	/// <summary>
	/// 为数据转换器提供容器。无法继承此类。
	/// </summary>
	public sealed class TransformPipeline
	{
		private readonly Dictionary<string, IRewriteTransform> _transforms = new Dictionary<string, IRewriteTransform>();

		/// <summary>
		/// 将指定的解析器类型字符串中包含的 <see cref="IRewriteTransform"/> 对象添加到容器中。
		/// </summary>
		/// <param name="transformType">包含 <see cref="IRewriteTransform"/> 对象类型信息的字符串。</param>
		public void AddTransform(string transformType) { this.AddTransform(TypeHelper.Activate<IRewriteTransform>(transformType, null)); }

		/// <summary>
		/// 将 <see cref="IRewriteTransform"/> 对象添加到容器中。
		/// </summary>
		/// <param name="transform"><see cref="IRewriteTransform"/> 对象。</param>
		public void AddTransform(IRewriteTransform transform)
		{
			if (transform == null) throw new ArgumentNullException("transform");

			this._transforms.Add(transform.Name, transform);
		}

		/// <summary>
		/// 获取具有指定名称的数据转换器。
		/// </summary>
		/// <param name="name">数据转换器名称。</param>
		/// <returns><see cref="IRewriteTransform"/> 对象。</returns>
		public IRewriteTransform GetTransform(string name) { return this._transforms[name]; }
	}
}
